REM >Director:Menus.Enumerate
ON ERROR ERROR EXT ERR,REPORT$+" at line "+STR$ ERL:END
SYS "OS_GetEnv" TO in$
type%=VAL(FNarg(in$,"-type","0"))
CASE type% OF
  WHEN 0: name$="Menus": action$=" -sub Dynamic:/Director:Menus.Internal.MenusSub"
  WHEN 1: name$="Displayed": action$=""
  WHEN 2: name$="Icons": action$=" -sub Dynamic:/Director:Menus.Internal.IconsSub"
  WHEN 3: name$="Filters": action$=" -sub Dynamic:/Director:Menus.Internal.FiltersSub"
  WHEN 4: name$="Windows": action$=" -sub Dynamic:/Director:Menus.Internal.WindowsSub"
  OTHERWISE: ERROR 1,"Unknown type"
ENDCASE

menu=FNswi_number("Director_Menu")
endmenu=FNswi_number("Director_EndMenu")
option=FNswi_number("Director_Option")
command=FNswi_number("Director_Command")
dash=FNswi_number("Director_Dash")
enumerate=FNswi_number("Director_Enumerate")

*Set Director$Menu Enumerate
SYS menu,name$+" <Director$Menu> -temp"
p%=type%
REPEAT
  SYS enumerate,p% TO p%,name$
  IF p% THEN
    SYS option,""""+name$+""""+action$
  ENDIF
UNTIL p%=0
SYS endmenu
END

DEF FNarg(str$,arg$,def$)
LOCAL i,j
i=INSTR(str$,arg$)
IF i=0 THEN =def$
i+=LEN arg$+1
j=INSTR(str$+" <"," ",i)
=MID$(str$,i,j-i)

DEF FNswi_number(swi$)
SYS "OS_SWINumberFromString",,swi$ TO swi%
=swi%
